package com.guxingke.typecho4j.widget.provider.base;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletContext;

import com.guxingke.typecho4j.Typecho4j;
import com.guxingke.typecho4j.jfinal.model.Option;
import com.guxingke.typecho4j.widget.WidgetProvider;
import com.guxingke.typecho4j.widget.provider.OptionBaseWidget;
import com.jfinal.core.Controller;

/**
 * 全局配置组件
 * 
 * @author guxingke
 * */
public class ApplicationOptionWidget extends OptionBaseWidget implements
		WidgetProvider {

	/**
	 * applicationContext,便于向application作用域中添加数据
	 * */
	private ServletContext servletContext;

	/**
	 * 缓存
	 * */
	private Map<String, String> cacheOption;

	/**
	 * 主题路径
	 */
	private String themePath;

	@Override
	public boolean init() {
		initLogger();

		this.cacheOption = new HashMap<String, String>();
		this.servletContext = Typecho4j.typecho4j().getServletContext();

		this.themePath = getSiteUrl() + "/"
				+ constants.getActiveThemePath();

		this.servletContext.setAttribute("options", this);

		// 初始化constants
		constants.setSiteUrl(getSiteUrl());

		return true;
	}

	@Override
	public void excute(Controller controller) {
		// this.refresh();
	}

	@Override
	public void refresh() {
		this.cacheOption.clear();
	}

	/**
	 * 持久化option,update or create
	 * */
	@Override
	protected boolean setValue(Option option) {
		if (option == null) {
			logger.warn("option is null");
			return false;
		}

		boolean result = super.setValue(option);

		if (result) {
			this.refresh();
			return true;
		} else {
			logger.error("option update or save was failed "
					+ option.toString());
		}
		return result;
	}

	/**
	 * 根据key获取组件中对应的数据，cache->options
	 * */
	protected String getValue(String key) {
		if (cacheOption.containsKey(key)) {
			return cacheOption.get(key);
		}

		String result = super.getValue(key);

		if (result == null) {
			logger.warn("no result match this key");
			return null;
		} else {
			cacheOption.put(key, result);
			return result;
		}
	}

	/**
	 * 获取网站url
	 * */
	public String getSiteUrl() {
		return getValue("siteUrl");
	}

	/**
	 * 获取版本
	 * */
	public String getGenerator() {
		return getValue("generator");
	}

	/**
	 * 获取网站标题
	 * */
	public String getTitle() {
		return getValue("title");
	}

	/**
	 * 获取网站描述
	 * */
	public String getDescription() {
		return getValue("description");
	}

	/**
	 * 获取关键字
	 * */
	public String getKeywords() {
		return getValue("keywords");
	}

	public String getThemePath() {
		return themePath;
	}
}
